// noinspection JSUnresolvedReference /** * Field Google Map */ /* global jQuery, document, redux_change, redux, google */ (function ( $ ) { 'use strict'; redux.field_objects = redux.field_objects || {}; redux.field_objects.google_maps = redux.field_objects.google_maps || {}; /* LIBRARY INIT */ redux.field_objects.google_maps.init = function ( selector ) { if ( ! selector ) { selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' ); } $( selector ).each( function ( i ) { let delayRender; const el = $( this ); let parent = el; if ( ! el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ':hidden' ) ) { return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } // Check for delay render, which is useful for calling a map // render after JavaScript load. delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) ); // API Key button. redux.field_objects.google_maps.clickHandler( el ); // Init our maps. redux.field_objects.google_maps.initMap( el, i, delayRender ); } ); }; /* INIT MAP FUNCTION */ redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) { let delayed; let scrollWheel; let streetView; let mapType; let address; let defLat; let defLong; let defaultZoom; let mapOptions; let geocoder; let g_autoComplete; let g_LatLng; let g_map; let noLatLng = false; // Pull the map class. const mapClass = el.find( '.redux_framework_google_maps' ); const containerID = mapClass.attr( 'id' ); const autocomplete = containerID + '_autocomplete'; const canvas = containerID + '_map_canvas'; const canvasId = $( '#' + canvas ); const latitude = containerID + '_latitude'; const longitude = containerID + '_longitude'; // Add map index to data attr. // Why, say we want to use delay_render, // and want to init the map later on. // You'd need the index number in the // event of multiple map instances. // This allows one to retrieve it // later. $( mapClass ).attr( 'data-idx', idx ); if ( true === delayRender ) { return; } // Map has been rendered, no need to process again. if ( $( '#' + containerID ).hasClass( 'rendered' ) ) { return; } // If a map is set to delay render and has been initiated // from another scrip, add the 'render' class so rendering // does not occur. // It messes things up. delayed = Boolean( mapClass.data( 'delay-render' ) ); if ( true === delayed ) { mapClass.addClass( 'rendered' ); } // Create the autocomplete object, restricting the search // to geographical location types. g_autoComplete = await google.maps.importLibrary( 'places' ); g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} ); // Data bindings. scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) ); streetView = Boolean( mapClass.data( 'street-view' ) ); mapType = Boolean( mapClass.data( 'map-type' ) ); address = mapClass.data( 'address' ); address = decodeURIComponent( address ); address = address.trim(); // Set default Lat/lng. defLat = canvasId.data( 'default-lat' ); defLong = canvasId.data( 'default-long' ); defaultZoom = canvasId.data( 'default-zoom' ); // Eval whether to set maps based on lat/lng or address. if ( '' !== address ) { if ( '' === defLat || '' === defLong ) { noLatLng = true; } } else { noLatLng = false; } // Can't have empty values, or the map API will complain. // Set default for the middle of the United States. defLat = defLat ? defLat : 39.11676722061108; defLong = defLong ? defLong : -100.47761000000003; if ( noLatLng ) { // If displaying a map based on an address. geocoder = new google.maps.Geocoder(); // Set up Geocode and pass address. geocoder.geocode( {'address': address}, function ( results, status ) { let latitude; let longitude; // Function results. if ( status === google.maps.GeocoderStatus.OK ) { // A good address was passed. g_LatLng = results[0].geometry.location; // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); // Get and set lat/long data. latitude = el.find( '#' + containerID + '_latitude' ); latitude.val( results[0].geometry.location.lat() ); longitude = el.find( '#' + containerID + '_longitude' ); longitude.val( results[0].geometry.location.lng() ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } else { // No data found, alert the user. alert( 'Geocode was not successful for the following reason: ' + status ); } } ); } else { // If displaying map based on an lat/lng. g_LatLng = new google.maps.LatLng( defLat, defLong ); // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, // Start off far unless an item is selected, set by php. streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create the map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } }; redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) { let markerTooltip; let infoWindow; let g_marker; let geoAlert = mapClass.data( 'geo-alert' ); // Get HTML. const input = document.getElementById( autocomplete ); // Set objects into the map. g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input ); // Bind objects to the map. g_autoComplete = new google.maps.places.Autocomplete( input ); g_autoComplete.bindTo( 'bounds', g_map ); // Get the marker tooltip data. markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Create infoWindow. infoWindow = new google.maps.InfoWindow(); // Create marker. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), draggable: true, title: markerTooltip, animation: google.maps.Animation.DROP } ); geoAlert = decodeURIComponent( geoAlert ); // Place change. google.maps.event.addListener( g_autoComplete, 'place_changed', function () { let place; let address; let markerTooltip; infoWindow.close(); // Get place data. place = g_autoComplete.getPlace(); // Display alert if something went wrong. if ( ! place.geometry ) { window.alert( geoAlert ); return; } console.log( place.geometry.viewport ); // If the place has a geometry, then present it on a map. if ( place.geometry.viewport ) { g_map.fitBounds( place.geometry.viewport ); } else { g_map.setCenter( place.geometry.location ); g_map.setZoom( 17 ); // Why 17? Because it looks good. } markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Set the marker icon. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), title: markerTooltip, clickable: true, draggable: true, animation: google.maps.Animation.DROP } ); // Set marker position and display. g_marker.setPosition( place.geometry.location ); g_marker.setVisible( true ); // Form array of address components. address = ''; if ( place.address_components ) { address = [( place.address_components[0] && place.address_components[0].short_name || '' ), ( place.address_components[1] && place.address_components[1].short_name || '' ), ( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' ); } // Set the default marker info window with address data. infoWindow.setContent( '
' + place.name + '
' + address ); infoWindow.open( g_map, g_marker ); // Run Geolocation. redux.field_objects.google_maps.geoLocate( g_autoComplete ); // Fill in address inputs. redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete ); } ); // Marker drag. google.maps.event.addListener( g_marker, 'drag', function ( event ) { document.getElementById( latitude ).value = event.latLng.lat(); document.getElementById( longitude ).value = event.latLng.lng(); } ); // End marker drag. google.maps.event.addListener( g_marker, 'dragend', function () { redux_change( el.find( '.redux_framework_google_maps' ) ); } ); // Zoom Changed. g_map.addListener( 'zoom_changed', function () { el.find( '.google_m_zoom_input' ).val( g_map.getZoom() ); } ); // Marker Info Window. infoWindow = new google.maps.InfoWindow(); google.maps.event.addListener( g_marker, 'click', function () { const marker_info = containerID + '_marker_info'; const infoValue = document.getElementById( marker_info ).value; if ( '' !== infoValue ) { infoWindow.setContent( infoValue ); infoWindow.open( g_map, g_marker ); } } ); }; /* FILL IN ADDRESS FUNCTION */ redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) { // Set variables. const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' ); // What if someone only wants city, or state, ect... // gotta do it this way to check for the address! // Need to check each of the returned components to see what is returned. const componentForm = { street_number: 'short_name', route: 'long_name', locality: 'long_name', administrative_area_level_1: 'short_name', country: 'long_name', postal_code: 'short_name' }; // Get the place details from the autocomplete object. const place = g_autoComplete.getPlace(); let component; let i; let addressType; let _d_addressType; let val; let len; document.getElementById( latitude ).value = place.geometry.location.lat(); document.getElementById( longitude ).value = place.geometry.location.lng(); for ( component in componentForm ) { if ( componentForm.hasOwnProperty( component ) ) { // Push in the dynamic form element ID again. component = containerID + '_' + component; // Assign to proper place. document.getElementById( component ).value = ''; document.getElementById( component ).disabled = false; } } // Get each component of the address from the place details // and fill the corresponding field on the form. len = place.address_components.length; for ( i = 0; i < len; i += 1 ) { addressType = place.address_components[i].types[0]; if ( componentForm[addressType] ) { // Push in the dynamic form element ID again. _d_addressType = containerID + '_' + addressType; // Get the original. val = place.address_components[i][componentForm[addressType]]; // Assign to proper place. document.getElementById( _d_addressType ).value = val; } } }; redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) { if ( navigator.geolocation ) { navigator.geolocation.getCurrentPosition( function ( position ) { const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude ); const circle = new google.maps.Circle( { center: geolocation, radius: position.coords.accuracy } ); g_autoComplete.setBounds( circle.getBounds() ); } ); } }; /* API BUTTON CLICK HANDLER */ redux.field_objects.google_maps.clickHandler = function ( el ) { // Find the API Key button and react on click. el.find( '.google_m_api_key_button' ).on( 'click', function () { // Find message wrapper. const wrapper = el.find( '.google_m_api_key_wrapper' ); if ( wrapper.is( ':visible' ) ) { // If the wrapper is visible, close it. wrapper.slideUp( 'fast', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } else { // If the wrapper is visible, open it. wrapper.slideDown( 'medium', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } } ); el.find( '.google_m_autocomplete' ).on( 'keypress', function ( e ) { if ( 13 === e.keyCode ) { e.preventDefault(); } } ); // Auto select autocomplete contents, // since Google doesn't do this inherently. el.find( '.google_m_autocomplete' ).on( 'click', function ( e ) { $( this ).trigger( 'focus' ); $( this ).trigger( 'select' ); e.preventDefault(); } ); }; } )( jQuery ); 1XBET на Андроид Официальное приложение для вашего смартфона – Orchid Group
Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

1XBET на Андроид Официальное приложение для вашего смартфона

Ищете 1хбет зеркало или зеркало 1хбет? Установите 1хбет официальный сайт на свой смартфон! 1xbet официальный сайт доступен для скачивания. 1хбет скачать или скачать 1xbet – это просто! Удобное приложение 1xbet скачать для Android. Получите доступ к 1 xbet и наслаждайтесь игровым процессом на 1xbet или 1хбет. Не забудьте использовать зеркало 1xbet для стабильного доступа!

Почему стоит скачать 1XBET на Андроид?

  • Официальное приложение 1xbet обеспечивает безопасность и надежность ваших данных.
  • Быстрый доступ к 1xbet официальный сайт и 1xbet зеркало в любое время.
  • Удобный интерфейс для ставок и игр на 1хбет.
  • Возможность скачать 1xbet на Андроид и пользоваться всеми функциями без ограничений.
  • Регулярные обновления приложения для улучшения качества обслуживания.

Если вы ищете 1хбет зеркало или 1xbet зеркало, приложение поможет вам быстро найти актуальные ссылки.

Скачав 1хбет скачать на Андроид, вы получите доступ к:

  • Широкому выбору спортивных событий и казино.
  • Эксклюзивным акциям и бонусам от 1xbet.
  • Не упустите возможность скачать 1xbet на Андроид и наслаждаться всеми преимуществами 1 xbet!

    Удобство использования официального приложения

    1xbet скачать на Андроид – это не только удобство, но и безопасность. Официальное приложение 1хбет гарантирует защиту ваших данных и оперативный доступ к 1xbet зеркало. С 1xbet официальный сайт всегда под рукой, вы сможете быстро совершать ставки и следить за результатами в режиме реального времени. Скачать 1xbet – это выбор тех, кто ценит качество и надежность.

    Не упустите возможность скачать 1xbet на Андроид и наслаждаться всеми преимуществами 1хбет официального сайта. С 1xbet зеркало вы всегда будете в курсе событий и сможете воспользоваться всеми функциями платформы. 1хбет скачать – это простой и удобный способ оставаться активным игроком в любое время.

    Быстрый доступ к ставкам и играм

    Скачав 1xbet официальное приложение для Android, вы получаете мгновенный доступ к широкому выбору ставок и игр. Благодаря удобному интерфейсу, вы сможете быстро переходить между разделами, делать ставки и наслаждаться любимыми играми.

    Если возникнут проблемы с доступом, используйте 1xbet зеркало или 1хбет зеркало, чтобы всегда оставаться на 1хбет официальном сайте. Зеркало 1хбет обеспечивает стабильную работу и защиту ваших данных.

    Не забудьте, что 1xbet скачать можно прямо сейчас, чтобы начать пользоваться всеми преимуществами 1xbet и 1хбет. Установите приложение и получите быстрый доступ к лучшим ставкам и играм!

    Безопасность и надежность

    Приложение 1xbet для Android гарантирует пользователям высокий уровень безопасности и надежности. Официальное приложение 1хбет скачать можно только с официального сайта или через 1xbet зеркало, что исключает риск загрузки вредоносного ПО.

    Если вы не можете получить доступ к 1xbet официальный сайт, используйте зеркало 1xbet, которое обеспечивает стабильную работу и защиту данных. 1хбет зеркало всегда доступно и помогает избежать блокировок.

    Преимущества
    Описание

    Защита данных Приложение 1xbet использует современные технологии шифрования, чтобы обеспечить безопасность ваших личных данных. Стабильность работы 1хбет официальный сайт и зеркало 1xbet обеспечивают бесперебойную работу приложения, даже при блокировках. Легальный доступ Скачать 1xbet можно только через официальные источники, что исключает риск загрузки некачественного или вредоносного ПО.

    Не рискуйте своей безопасностью – всегда используйте 1xbet официальный сайт или зеркало 1хбет для скачивания приложения. Это гарантирует надежную и безопасную работу с платформой 1 xbet.

    Акции и бонусы для пользователей

    Приложение 1хбет предлагает своим пользователям уникальные акции и щедрые бонусы. Благодаря официальному сайту 1xbet, вы сможете получать доступ к эксклюзивным предложениям, которые не найти на других платформах. Для тех, кто предпочитает использовать зеркало 1хбет, все акции и бонусы также доступны без ограничений.

    Скачав 1xbet на Андроид, вы получите доступ к регулярным розыгрышам и приветственным бонусам. Зеркало 1xbet позволяет не только сохранять доступ к актуальным акциям, но и обеспечивает стабильную работу приложения. Не упустите шанс увеличить свои выигрыши с помощью специальных предложений от 1хбет.

    Официальный сайт 1xbet и зеркало 1хбет предоставляют пользователям возможность участвовать в турнирах с крупными призовыми фондами. Скачать 1xbet на Андроид – это первый шаг к участию в этих захватывающих мероприятиях. Не забудьте регулярно проверять зеркало 1xbet, чтобы быть в курсе всех обновлений и новых акций.

    Станьте частью эксклюзивного сообщества пользователей 1хбет и наслаждайтесь всеми преимуществами, которые предлагает официальный сайт 1xbet. Скачайте приложение прямо сейчас и получите доступ к лучшим бонусам и акциям!

    Как скачать 1XBET на Андроид?

    Чтобы скачать 1xbet на Андроид, перейдите на 1хбет официальный сайт или используйте 1xbet зеркало. На главной странице найдите раздел “Скачать приложение”.

    Если вы не можете попасть на 1хбет официальный сайт, воспользуйтесь зеркалом 1хбет. Это позволит вам скачать 1xbet без ограничений.

    После перехода на страницу загрузки, нажмите “Скачать 1xbet”. Установите приложение на ваше устройство с Android, следуя инструкциям.

    Теперь вы можете наслаждаться всеми функциями 1хбет через официальное приложение. Не забудьте регулярно проверять 1xbet зеркало для обновлений и доступа к сайту.

    Попробуйте прямо сейчас!

    Готовы начать увлекательное путешествие в мир азартных игр и ставок? Скачайте 1xbet на Андроид и получите доступ к лучшим функциям и возможностям!

    • Быстрый и удобный способ 1xbet скачать прямо на ваше устройство.
    • Гарантия безопасности – 1xbet официальный сайт всегда под рукой.
    • Если возникнут проблемы с доступом, используйте 1хбет зеркало или зеркало 1хбет.

    Почему стоит выбрать 1xbet?

  • Официальное приложение для Android – 1xbet скачать легко и быстро.
  • Круглосуточная поддержка на 1хбет официальный сайт.
  • Доступ к 1xbet зеркало для стабильного доступа в любое время.
  • Не упустите шанс! 1хбет скачать и наслаждайтесь игровым процессом без ограничений. 1xbet – ваш ключ к успеху!

    Design and Develop by Ovatheme